//  使用Socket.IO库来创建一个实时通信服务器的示例
import { Server } from "socket.io";
import http from "http";

// WebSocket是基于HTTP进行扩展的,创建一个新的HTTP服务器实例。
const server1 = http.createServer()
// 创建一个新的Socket.IO服务器实例，并设置CORS（跨源资源共享）策略以允许来自任何源的连接。
// 使用这个HTTP服务器实例来初始化一个新的Socket.IO服务器实例io
// Socket.io 默认已经内置了心跳机制来保持客户端和服务器之间的连接。
const io = new Server(server1, {
    cors: { origin: "*" },
    pingInterval: 20000, // 20秒发送一次ping消息 参数来调整心跳间隔和超时时间
    pingTimeout: 40000  // 40秒未收到pong消息则认为连接超时
    // 默认情况下，服务器会定期发送 “ping” 消息，等待客户端返回 “pong” 消息。如果在一定时间内没有收到 “pong” 消息，服务器会认为连接可能出现问题，并采取一些措施，如关闭连接。
});

// 当有新的客户端连接时触发
io.on("connection", (socket) => {
    // 后续代码逻辑不变
    io.emit("chat", `有人进入聊天当前人数：${io.engine.clientsCount}`)

    // 聊天时进行群发 广播
    socket.on("chat", (data) => {
        io.emit("chat", data)
    })

    socket.on("disconnect", () => {
        io.emit("chat", `有人退出聊天室，当前人数：${io.engine.clientsCount}`)
    })
});


// HTTP服务器实例，并让它监听1231端口。
server1.listen(1231);
